import { getUserInfo, login } from '@/api/user'
import { constantRoutes, resetRouter } from '@/router'
import { getToken, removeToken, setToken } from '@/utils/auth'

const state = {
  token: getToken() || '',
  userInfo: {},
  routes: constantRoutes // 用户所有的路由规则
}
const mutations = {
  // temp 是我昨天辛苦筛选出来的一个用户专属的路由规则数组
  setRoutes(state, newRoutes) {
    state.routes = [...constantRoutes, ...newRoutes] // 静态路由规则+自己的动态路由规则
  },
  setToken: (state, token) => {
    state.token = token // 存到仓库里
    // 本地存储
    // localStorage.setItem('token', token)
    setToken(token)
  },
  removeToken: (state) => {
    state.token = '' // 删除仓库的数据
    // localStorage.removeItem('token')
    removeToken() // 删除本地存储的数据
  },
  setUserInfo: (state, userInfo) => {
    state.userInfo = userInfo
  },
  // 清除用户信息
  removeUserInfo: (state) => {
    state.userInfo = {}
  }

}

const actions = {
  async login(context, obj) {
    // 请求后端数据,获取token
    // 拿到token存到仓库
    const res = await login(obj) // 调用请求的api函数
    console.log(res)
    context.commit('setToken', res)
  },
  async getUserInfo(context) {
    // 请求用户信息
    const res = await getUserInfo()
    console.log(res)
    // 调用mutations 存/修改数据
    context.commit('setUserInfo', res)
    return res
  },
  // actions不仅处理异步操作,也可以批量处理mutations的操作
  logout(context) {
    // 删除token
    context.commit('removeToken')
    // 删除用户信息
    context.commit('removeUserInfo')

    // 3. 重置路由规则 => 下一个账号登录进来 不应该是基于之前账号添加的规则
    resetRouter() // 花哥准备好了
  }

}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

